package cn.tedu.ivos.base.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;


/*Swagger2是一种用于生成和可视化RESTful风格Web服务的框架
  它可以帮助开发者定义和展示API接口，提升接口文档的可读性和易用性。
  @EnableSwagger2WebMvc 注解用于启用Swagger2的功能，用于支持API文档的自动化管理和维护*/
@EnableSwagger2WebMvc
@Component// 标识该类为Spring的组件，自动扫描并注册为Bean
@Configuration// 标识该类为配置类，告诉Spring这是一个配置类，用于替代XML配置文件
public class Knife4jConfig {
    /*创建ApiInfo【API信息对象】
     * 该方法用于构建API文档的信息部分，包括标题、描述和版本号*/
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("智慧车辆运营项目")
                .description("智慧车辆运营项目在线API文档")
                .version("1.0")
                .build();
    }

    /*Docket对象是Swagger2框架的核心配置对象，用于定义和构建API文档的规则,比如：扫描的包路径、请求路径、请求方法等*/
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())//设置API文档的详细信息，如标题、描述、版本等
                .select()//开始选择需要生成文档的API
                .apis(RequestHandlerSelectors.basePackage("cn.tedu.ivos"))//指定扫描的包路径，此处为"cn.tedu.ivos"包下的所有Controller
                .paths(PathSelectors.any())//匹配所有路径的API
                .build();//构建并返回配置
    }
}